﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace KsiazkaKucharska
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        /** Identyfikator nowo wstawionego przepisu (potrzebny do powrotu na stronę z nowym przepisem po jego dodaniu)
          */
        private Int32 IdPrzepisuNew;


        /** Po załadowaniu strony
          */
        protected void Page_Load(object sender, EventArgs e)
        {
            // Tryb dodawania przepisu - brak parametru
            if (HttpContext.Current.Request.QueryString["id_przepisu"] == null)
            {

                if (!IsPostBack) {
                    PrzepisDetailsView.ChangeMode(DetailsViewMode.Insert);
                    BindGridView2();
                }


                GridView1.Visible = false;
                GridView2.Visible = true;
                NowyProduktPlaceHolder.Visible = true;

            }
            else
            {
                // Jest podany parametr w żądaniu - wyświetlenie przepisu

                GridView1.Visible = true;
                GridView2.Visible = false;

                if (PrzepisDetailsView.CurrentMode == DetailsViewMode.ReadOnly)
                {
                    NowyProduktPlaceHolder.Visible = false;
                    GridView1.Columns[3].Visible = false;
                }
                else
                {
                    NowyProduktPlaceHolder.Visible = true;
                    GridView1.Columns[3].Visible = true;
                }


            }



        }

        /** Pobranie z sesji tablicy produktów przepisu i związanie jej z widokiem
          */
        public void BindGridView2()
        {
            if (Session["NewProduktyPrzepisu"] != null)
            {
                DataTable ProduktyPrzepisuDataTable = (DataTable)Session["NewProduktyPrzepisu"];

                if ((ProduktyPrzepisuDataTable != null) && (ProduktyPrzepisuDataTable.Rows.Count > 0))
                {
                    GridView2.Visible = true;
                    GridView2.DataSource = ProduktyPrzepisuDataTable;
                    GridView2.DataBind();
                }
                else
                {
                    GridView2.Visible = false;
                }
            }

        }

        /** Dodanie bieżącego przepisu do menu
         */
        protected void DodajDoMenuButton_Click(object sender, EventArgs e)
        {
            DataTable MenuDataTable = new DataTable();

            if (Session["Menu"] != null)
            {
                MenuDataTable = Session["Menu"] as DataTable;
            }

            if (MenuDataTable == null || MenuDataTable.Columns.Count == 0) {  
                MenuDataTable = new DataTable();
                MenuDataTable.Columns.Add(new System.Data.DataColumn("id_przepisu", typeof(Int32)));
                MenuDataTable.Columns.Add(new System.Data.DataColumn("nazwa_przepisu", typeof(String)));
                MenuDataTable.Columns.Add(new System.Data.DataColumn("nazwa_kategorii", typeof(String)));
                MenuDataTable.Columns.Add(new System.Data.DataColumn("czas_przygotowania", typeof(String)));
                MenuDataTable.Columns.Add(new System.Data.DataColumn("poziom_trudnosci", typeof(String)));

            }

            Label NazwaPrzepisuLabel = PrzepisDetailsView.Rows[0].Cells[0].FindControl("NazwaPrzepisuLabel") as Label;
            Label NazwaKategoriiLabel = PrzepisDetailsView.Rows[0].Cells[0].FindControl("NazwaKategoriiLabel") as Label;
            Label CzasPrzygotowaniaLabel = PrzepisDetailsView.Rows[0].Cells[0].FindControl("CzasPrzygotowaniaLabel") as Label;
            Label PoziomTrudnosciLabel = PrzepisDetailsView.Rows[0].Cells[0].FindControl("PoziomTrudnosciLabel") as Label;



            DataRow dr;
            dr = MenuDataTable.NewRow();
            dr["id_przepisu"] = Int32.Parse(HttpContext.Current.Request.QueryString["id_przepisu"]);
            dr["nazwa_przepisu"] = NazwaPrzepisuLabel.Text;
            dr["nazwa_kategorii"] = NazwaKategoriiLabel.Text;
            dr["czas_przygotowania"] = CzasPrzygotowaniaLabel.Text;
            dr["poziom_trudnosci"] = PoziomTrudnosciLabel.Text;

            MenuDataTable.Rows.Add(dr);
            Session.Add("Menu", MenuDataTable);

            
        }

        /** Dodanie nowego produktu do listy produktów przepisu
         */
        protected void NewProduktPrzepisuButton_Click(object sender, EventArgs e)
        {
            // Check if the ViewState has a data assoiciated within it. If
            //if (ViewState["CurrentData"] != null)


            // Brak parametru w żądaniu - tryb dodawania nowego przepisu
            if (HttpContext.Current.Request.QueryString["id_przepisu"] == null)
            {

                // Produkt dodawany do tablicy w pamięci
                DataTable ProduktyPrzepisuDataTable;
                    
                if (Session["NewProduktyPrzepisu"] != null) {
                    ProduktyPrzepisuDataTable = Session["NewProduktyPrzepisu"] as DataTable;
                } else {
                    ProduktyPrzepisuDataTable = new DataTable();
                    ProduktyPrzepisuDataTable.Columns.Add(new System.Data.DataColumn("id_produktu", typeof(Int32)));
                    ProduktyPrzepisuDataTable.Columns.Add(new System.Data.DataColumn("nazwa_produktu", typeof(String)));
                    ProduktyPrzepisuDataTable.Columns.Add(new System.Data.DataColumn("id_produktu_old", typeof(Int32)));
                    ProduktyPrzepisuDataTable.Columns.Add(new System.Data.DataColumn("ilosc", typeof(String)));
                    ProduktyPrzepisuDataTable.Columns.Add(new System.Data.DataColumn("id_jednostki", typeof(Int32)));
                    ProduktyPrzepisuDataTable.Columns.Add(new System.Data.DataColumn("nazwa_jednostki", typeof(String)));

                }

                DataRow dr;
                dr = ProduktyPrzepisuDataTable.NewRow();
                dr["id_produktu"]     = NewProduktyDropDownList.SelectedValue;
                dr["nazwa_produktu"]  = NewProduktyDropDownList.SelectedItem.Text;
                dr["id_produktu_old"] = NewProduktyDropDownList.SelectedValue;
                dr["ilosc"]           = NewIloscTextBox.Text;
                dr["id_jednostki"]    = NewJednostkiDropDownList.SelectedValue;
                dr["nazwa_jednostki"] = NewJednostkiDropDownList.SelectedItem.Text;

                ProduktyPrzepisuDataTable.Rows.Add(dr);
                Session.Add("NewProduktyPrzepisu", ProduktyPrzepisuDataTable);

                BindGridView2();

            }
            // Identyfikator przepisu w żądaniu - produkt od razu zapisywany do bazy danych

            else
            {

                ProduktyPrzepisuSqlDataSource.InsertParameters["id_przepisu"].DefaultValue  = HttpContext.Current.Request.QueryString["id_przepisu"];
                ProduktyPrzepisuSqlDataSource.InsertParameters["id_produktu"].DefaultValue  = NewProduktyDropDownList.SelectedValue;
                ProduktyPrzepisuSqlDataSource.InsertParameters["ilosc"].DefaultValue = NewIloscTextBox.Text;
                ProduktyPrzepisuSqlDataSource.InsertParameters["id_jednostki"].DefaultValue = NewJednostkiDropDownList.SelectedValue;

                ProduktyPrzepisuSqlDataSource.Insert();
                GridView1.DataBind();

            }
            NewProduktyDropDownList.SelectedValue = "";
            NewIloscTextBox.Text = "";
            NewJednostkiDropDownList.SelectedValue = "";
        }

        /** Obsługa zdarzenia usunięcia rekordu z tablicy pamięciowej produktów przepisu
          */
        protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {

            DataTable ProduktyPrzepisuDataTable = Session["NewProduktyPrzepisu"] as DataTable;
            ProduktyPrzepisuDataTable.Rows.RemoveAt(e.RowIndex);

            BindGridView2();
            //Session.Add("NewProduktyPrzepisu", ProduktyPrzepisuDataTable);
        }

        /** Obsługa zdarzenia edycji rekordu w tablicy pamięciowej produktów przepisu
          */
        protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView2.EditIndex = e.NewEditIndex;
            BindGridView2();
        }

        /** Obsługa zdarzenia zapisu edytowanego rekordu w tablicy pamięciowej produktów przepisu
          */
        protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {


            DataTable ProduktyPrzepisuDataTable = Session["NewProduktyPrzepisu"] as DataTable;

            DropDownList ProduktyDropDownList = GridView2.Rows[e.RowIndex].Cells[0].FindControl("ProduktyDropDownList") as DropDownList;
            TextBox IloscTextBox = GridView2.Rows[e.RowIndex].Cells[1].FindControl("IloscTextBox") as TextBox;
            DropDownList JednostkiDropDownList = GridView2.Rows[e.RowIndex].Cells[2].FindControl("JednostkiDropDownList") as DropDownList;


            ProduktyPrzepisuDataTable.Rows[e.RowIndex][0] = ProduktyDropDownList.SelectedValue;
            ProduktyPrzepisuDataTable.Rows[e.RowIndex][1] = ProduktyDropDownList.SelectedItem.Text;
            ProduktyPrzepisuDataTable.Rows[e.RowIndex][2] = ProduktyDropDownList.SelectedValue;
            ProduktyPrzepisuDataTable.Rows[e.RowIndex][3] = IloscTextBox.Text;
            ProduktyPrzepisuDataTable.Rows[e.RowIndex][4] = JednostkiDropDownList.SelectedValue;
            ProduktyPrzepisuDataTable.Rows[e.RowIndex][5] = JednostkiDropDownList.SelectedItem.Text;

            GridView2.EditIndex = -1;
            BindGridView2();

            //Session.Add("NewProduktyPrzepisu", ProduktyPrzepisuDataTable);

        }

        /** Obsługa zdarzenia anulowania edycji rekordu w tablicy pamięciowej produktów przepisu
         */
        protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView2.EditIndex = -1;
            BindGridView2();
        }

        /** Obsługa zdarzenia wstawienia rekordu nowego przepisu - przepisanie produktów z tablicy pamięciowej do bazy danych
         */
        protected void PrzepisDetailsView_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
        {

            DataTable ProduktyPrzepisuDataTable = (DataTable)Session["NewProduktyPrzepisu"];

            if ((ProduktyPrzepisuDataTable != null) && (ProduktyPrzepisuDataTable.Rows.Count > 0))
            {

                foreach (DataRow row in ProduktyPrzepisuDataTable.Rows)
                {

                    ProduktyPrzepisuSqlDataSource.InsertParameters["id_przepisu"].DefaultValue = Convert.ToString(IdPrzepisuNew);
                    ProduktyPrzepisuSqlDataSource.InsertParameters["id_produktu"].DefaultValue = row["id_produktu"].ToString();
                    ProduktyPrzepisuSqlDataSource.InsertParameters["ilosc"].DefaultValue = row["ilosc"].ToString();
                    ProduktyPrzepisuSqlDataSource.InsertParameters["id_jednostki"].DefaultValue = row["id_jednostki"].ToString();

                    ProduktyPrzepisuSqlDataSource.Insert();

                }
            }
            // Wyświetlenie strony z nowym przepisem 
            Response.Redirect("~/przepis.aspx?id_przepisu=" + Convert.ToString(IdPrzepisuNew));
            

        }

        /** Obsługa zdarzenia wstawienia rekordu nowego przepisu do bazy danych - pobranie i zapamiętanie identyfikatora nowego rekordu
          */
        protected void PrzepisSqlDataSource_Inserted(object sender, SqlDataSourceStatusEventArgs e)
        {


            IdPrzepisuNew = Convert.ToInt32(e.Command.Parameters["@id_przepisu"].Value);
        }

        /** Obsługa zdarzenia edycji rekordu przepisu - wyświetlenie sekcji dodawania nowego produktu do przepisu
          */
        protected void PrzepisDetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
        {
            NowyProduktPlaceHolder.Visible = true;
        }

        /** Obsługa zdarzenia uaktualnienia rekordu przepisu - ukrycie sekcji dodawania nowego produktu do przepisu
          */
        protected void PrzepisDetailsView_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
        {
            NowyProduktPlaceHolder.Visible = false;

        }

        /** Obsługa zdarzenia akcji na rekordzie przepisu - sterowanie sekcją dodawania nowego produktu do przepisu
          */
        protected void PrzepisDetailsView_ItemCommand(object sender, DetailsViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Edit"))
            {

                NowyProduktPlaceHolder.Visible = true;
                GridView1.Columns[3].Visible = true;
            }
            else if (e.CommandName.Equals("Cancel") || e.CommandName.Equals("Update"))
            {
                NowyProduktPlaceHolder.Visible = false;
                GridView1.Columns[3].Visible = false;
            }
            


        }

        /** Obsługa zdarzenia usunięcia przepisu - przekierowanie na stronę główną
           */
        protected void PrzepisDetailsView_ItemDeleted(object sender, DetailsViewDeletedEventArgs e)
        {
            Response.Redirect("~/default.aspx");
        }


        



 
       

    }
    
}